vpp 软件架构介绍 您所在的位置:网站首页 vpp node调度框架 vpp 软件架构介绍

vpp 软件架构介绍

2024-07-12 09:23| 来源: 网络整理| 查看: 265

接触fd.io/vpp有大概一年半的时间了,在vpp框架基础上也做过不少项目。端口镜像及流镜像抓包功能;基于dpdk acl/ring/meter模块实现vpp的qos功能;基于dpdk模块优化实现ipv4 报文重组功能;gre、IPsec等overlay隧道等等。对Vpp的框架也有一些了解但谈不上深入。因为公司业务调整,最近也要换一份工作,后面很有可能不再基于vpp二次开发。今天参考vpp官网文档,也做一个简单的总结吧。

vpp简介

VPP:(the vector packet processor)是一个可扩展框架,可提供开箱即用的交换机/路由器功能。是Linux基金会下开源项目FD.io的一个子项目,由思科贡献的开源版本,目前是FD.io的最核心的项目。

VPP是一个模块化和可扩展的软件框架,用于创建网络数据面应用程序。更重要的是,VPP代码为现代通用处理器平台(x86、ARM、PowerPC等)而生,并把重点放在优化软件和硬件接口上,以便用于实时的网络输入输出操作和报文处理。

为了提高性能,vpp数据平面是由转发节点的有向图组成,这些节点在每次调用时处理多个数据包。这种模式支持各种微处理器优化:流水线处理和预取功能降低依赖数据的读取延迟,固有的I-cache阶段行为,向量指令。除了硬件输入和硬件输出节点,整个转发图都是可移植的代码。模块化设计框架允许任何人“插入”新的图形节点,而不需要更改核心/内核代码。

VPP一次从网卡的硬件队列Rx ring收到多个数据包,组成一个Packet vector,借助于报文处理图Packet processing graph来实现数据面转发业务处理流程。图中graph node把业务流程分解为一个个先后连接的业务node,每个业务node完成特定功能后流转到下个node处理。基于这种graph node的组织方式,使我们可以根据业务需求,通过plugin方式插入新的node节点或重新排列graph node,扩展非常方便,不会影响原有核心处理流程。

基于vector packet处理可以有效解决i-cache的抖动问题;向量报文进行预取可以解决读时延问题。多报文处理有效提升性能。

Vpp 分层实现

1、VPP Infra ( VPP infrastructure layer 基础结构层)

提供一些基本的通用的功能函数库:包括内存管理,向量操作,hash, timer、pool、bimap等

2、Vlib (vector processing library)

主要提供基本的应用管理库:buffer管理,graph node管理,线程,CLI,trace等

3、Vnet (vpp network stack)

提供网络资源能力:比如设备,L2,L3,L4功能,session管理,控制管理,流量管理等。

4、 Plugins

主要为实现一些功能,在程序启动的时候加载,一般情况下会在插件中加入一些node节点去实现相关功能,比如qos、nat等。

Vpp add plugins

vpp给开发者提供了一套工具,自动生成plugins框架,并将其添加到vpp框架中。我们可以使用extras/emacs目录下的脚本文件make-plugin.sh来自动生成plugins文件和

大概介绍一下生成文件及流程,具体的可以查询开发者文档。

代码语言:javascript复制$ yum intall emacs #需要提前安装emacs工具 $ cd ./src/plugins #进入plugins目录下 $ ../../extras/emacs/make-plugin.sh #执行make-plugin.sh 脚本文件 Loading /scratch/vpp-docs/extras/emacs/tunnel-c-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/tunnel-decap-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/tunnel-encap-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/tunnel-h-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/elog-4-int-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/elog-4-int-track-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/elog-enum-skel.el (source)... Loading /scratch/vpp-docs/extras/emacs/elog-one-datum-skel.el (source)... Plugin name: myplugin #plugin 目录名称 Dispatch type [dual or qs]: dual # node.c 文件种是否生成处理函数。 (Shell command succeeded with no output) OK... $ cd ./myplugin #进入myplugin目录查看生成的文件 $ ls CMakeLists.txt myplugin.c myplugin_periodic.c setup.pg myplugin_all_api_h.h myplugin.h myplugin_test.c myplugin.api myplugin_msg_enum.h node.cvpp api机制介绍 下图是Vpp和vat交互流程: (api详细介绍参考资料: https://segmentfault.com/a/1190000019613730)

本章节主要介绍vppapigen 生成编译所需要的头文件。以上面plugin目录文件,通过myplugin.api文件生成编译所需要的c文件与h文件。

代码语言:javascript复制[root@localhost myplugin]# ../../tools/vppapigen/vppapigen --includedir /root/vpp/src --outputdir . --input myplugin.api --output myplugin.api.h [root@localhost myplugin]# ls CMakeLists.txt myplugin.api.c myplugin.api.h myplugin.api_types.h myplugin.h myplugin_test.c setup.pg myplugin.api myplugin.api_enum.h myplugin.api_test.c myplugin.c myplugin_periodic.c node.c

总结:

本文主要介绍了vpp基本的软件架构,以及plugin文件生成工具使用及vppapigen工具的简单使用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有